package com.qwe.graduation.controller;

import com.qwe.graduation.utils.exception.Constants;
import com.qwe.graduation.utils.exception.Result;
import com.qwe.graduation.utils.exception.ServiceException;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * @author lzf
 * @date 2023/1/16 23:14
 * @description FileController
 */
@RestController
@RequestMapping("/file")
@Slf4j
public class FileController {
    //模拟视频图片上传
    @ApiOperation("图片上传")
    @PostMapping("/photoUpload")
    public Result upload(@RequestPart MultipartFile file){
        //获取文件名称
        String filename = file.getOriginalFilename();
        //在这里可以判断，只要自己需要的文件类型，判断后缀名
        if(filename.lastIndexOf(".")==-1){
            throw new ServiceException(Constants.CODE_600,"格式错误,只能上传jpg,png,webp格式");
        }
        String substring = filename.substring(filename.lastIndexOf("."));
        switch(substring){
            case ".jpg": break;
            case ".png": break;
            case ".webp": break;
            default: throw new ServiceException(Constants.CODE_600,"格式错误,只能上传jpg,png,webp格式");
        }
//        if (!".jpg".equals(substring)){
//            throw new ServiceException(Constants.CODE_600,"格式错误,只能上传jpg,png,webp格式");
//        }else if (!".png".equals(substring)){
//            throw new ServiceException(Constants.CODE_600,"格式错误,只能上传jpg,png,webp格式");
//        }else if (!".webp".equals(substring)){
//            throw new ServiceException(Constants.CODE_600,"格式错误,只能上传jpg,png,webp格式");
//        }
        log.info(filename);
        //重新随机生成名字
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        filename = uuid + filename;



        String os = System.getProperty("os.name");
        String staticResource;
        log.info("操作系统" + os);
        //如果是Windows系统
        if (os.toLowerCase().startsWith("win")) {
            staticResource = "D:\\test\\img\\";
        }else{//linux 和mac
            staticResource = "/opt/file/image/";
        }

        //这里应该把filename保存到数据库,供前端访问时使用
        // 上传文件/图像到指定文件夹（这里可以改成你想存放地址的相对路径）
        File savePos = new File(staticResource);
        // 不存在，则创建该文件夹
        if(!savePos.exists()){
            savePos.mkdir();
        }
        // 获取存放位置的规范路径
        String realPath;
        try {
            realPath = savePos.getCanonicalPath();
            file.transferTo(new File(realPath+"/"+ filename));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        // 上传该文件/图像视频至该文件夹下
        //上传成功，返回保存的文件地址
        return Result.success("http://localhost:9903/graduation/ecmweb/pic/" + filename);
    }

    @ApiOperation("图片上传")
    @PostMapping("/photoUserUpload")
    public String uploadUser(@RequestPart MultipartFile file){
        //获取文件名称
        String filename = file.getOriginalFilename();
        //在这里可以判断，只要自己需要的文件类型，判断后缀名
        if(filename.lastIndexOf(".")==-1){
            throw new ServiceException(Constants.CODE_600,"格式错误,只能上传jpg,png,webp格式");
        }
        String substring = filename.substring(filename.lastIndexOf("."));
        switch(substring){
            case ".jpg": break;
            case ".png": break;
            case ".webp": break;
            default: throw new ServiceException(Constants.CODE_600,"格式错误,只能上传jpg,png,webp格式");
        }
//        if (!".jpg".equals(substring)){
//            throw new ServiceException(Constants.CODE_600,"格式错误,只能上传jpg,png,webp格式");
//        }else if (!".png".equals(substring)){
//            throw new ServiceException(Constants.CODE_600,"格式错误,只能上传jpg,png,webp格式");
//        }else if (!".webp".equals(substring)){
//            throw new ServiceException(Constants.CODE_600,"格式错误,只能上传jpg,png,webp格式");
//        }
        log.info(filename);
        //重新随机生成名字
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        filename = uuid + filename;



        String os = System.getProperty("os.name");
        String staticResource;
        log.info("操作系统" + os);
        //如果是Windows系统
        if (os.toLowerCase().startsWith("win")) {
            staticResource = "D:\\test\\img\\";
        }else{//linux 和mac
            staticResource = "/opt/file/image/";
        }

        //这里应该把filename保存到数据库,供前端访问时使用
        // 上传文件/图像到指定文件夹（这里可以改成你想存放地址的相对路径）
        File savePos = new File(staticResource);
        // 不存在，则创建该文件夹
        if(!savePos.exists()){
            savePos.mkdir();
        }
        // 获取存放位置的规范路径
        String realPath;
        try {
            realPath = savePos.getCanonicalPath();
            file.transferTo(new File(realPath+"/"+ filename));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        // 上传该文件/图像视频至该文件夹下
        //上传成功，返回保存的文件地址
        return "http://localhost:9903/graduation/ecmweb/pic/" + filename;
    }

    @ApiOperation("视频上传")
    @PostMapping("/videoUpload")
    public Result videoupload(@RequestPart MultipartFile file){
        //获取文件名称
        String filename = file.getOriginalFilename();
        //在这里可以判断，只要自己需要的文件类型，判断后缀名
        if(filename.lastIndexOf(".")==-1){
            throw new ServiceException(Constants.CODE_600,"格式错误,只能上传jpg,png,webp格式");
        }
        String substring = filename.substring(filename.lastIndexOf("."));
        if (!substring.equals(".mp4")) {
            throw new ServiceException(Constants.CODE_600, "格式错误,只能上传mp4格式");
        }
        log.info(filename);
        //重新随机生成名字
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        filename = uuid + filename;



        String os = System.getProperty("os.name");
        String staticResource;
        log.info("操作系统" + os);
        //如果是Windows系统
        if (os.toLowerCase().startsWith("win")) {
            staticResource = "D:\\test\\img\\";
        }else{//linux 和mac
            staticResource = "/opt/file/image/";
        }

        //这里应该把filename保存到数据库,供前端访问时使用
        // 上传文件/图像到指定文件夹（这里可以改成你想存放地址的相对路径）
        File savePos = new File(staticResource);
        // 不存在，则创建该文件夹
        if(!savePos.exists()){
            savePos.mkdir();
        }
        // 获取存放位置的规范路径
        String realPath;
        try {
            realPath = savePos.getCanonicalPath();
            file.transferTo(new File(realPath+"/"+ filename));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        // 上传该文件/图像视频至该文件夹下
        //上传成功，返回保存的文件地址
        return Result.success("http://localhost:9903/graduation/ecmweb/pic/" + filename);
    }


    public String lastName(File file){
        if(file==null) return null;
        String filename = file.getName();
        if(filename.lastIndexOf(".")==-1){
            return "";//文件没有后缀名的情况
        }
        return filename.substring(filename.lastIndexOf("."));
    }
}
